﻿using System;

namespace Ue.Core
{
    /// <summary>
    /// 浅对象应用
    /// 弱引用允许垃圾回收器在回收对象的同时仍然允许应用程序访问该对象。如果需要该对象，则仍然可以获取对该对象的强引用，并阻止对它进行回收
    ///一般用于静态全局字段等一些GC无法回收的对象。
    ///使用Weak后对象即引用，又可以GC回收
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class Weak<T>
    {
        private readonly WeakReference _target;

        public Weak(T target)
        {
            _target = new WeakReference(target);
        }

        public Weak(T target, bool trackResurrection)
        {
            _target = new WeakReference(target, trackResurrection);
        }

        public T Target
        {
            get { return (T)_target.Target; }
            set { _target.Target = value; }
        }
    }
}
